package com.frejoys.service;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.frejoys.common.dto.admin.DelIdDto;
import com.frejoys.common.dto.common.auth.*;
import com.frejoys.dao.entity.AuthGroup;
import com.frejoys.dao.entity.AuthRule;

import java.util.List;
import java.util.Map;

public interface AuthGroupService extends IService<AuthGroup> {

    default AuthGroup getOnly(QueryWrapper<AuthGroup> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    default AuthGroup getOnly(LambdaQueryWrapper<AuthGroup> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    /**
     * 创建
     * @param dto
     * @return
     */
    Boolean addInfo(AuthGroupAddDto dto);

    /**
     * 更新
     * @param dto
     * @return
     */
    Boolean upInfo(AuthGroupUpDto dto);

    /**
     * 添加权限
     * @param dto
     * @return
     */
    Boolean addRule(AuthGroupRulesAddDto dto);

    /**
     * 减少权限
     * @param dto
     * @return
     */
    Boolean reduceRule(AuthGroupRulesAddDto dto);


    /**
     * 信息
     * @param id
     * @return
     */
    String getRulesInfo(Integer id);

    /**
     * 列表
     * @param dto
     * @return
     */
    IPage<AuthGroup> listInfo(Long userId, AuthGroupListDto dto);

    /**
     * 过滤用户权限，返回拥有的权限
     * @param userId
     * @param rules
     * @return
     */
    List<AuthRule> filterRule(Long userId, List<AuthRule> rules);

    /**
     * 获取用户组所有的权限
     * @param userId
     * @return
     */
    List<String> getUserGroupRules(Long userId);

    /**
     * 获取权限角色数据
     * @param ids
     * @return
     */
    List<AuthGroup> listGroupById(List<Integer> ids);

    /**
     * 获取用户组所有的权限
     * @param userId
     * @return
     */
    List<String> listUserGroupRules(Long userId);

    /**
     * 获取用户组所有的权限
     * @param userId
     * @return
     */
    Map<Long, String> mapUserGroupRules(List<Long> userId);

    /**
     * 获取用户组权限名称
     * @param ids
     * @return
     */
    List<AuthGroup> listUserGroupTitle(List<Integer> ids);


    /**
     * 给用户授予权限组
     */
    boolean authRuleAuthorize(AuthGroupAuthorizeDto dto);

    //删除权限组
    boolean deleteAuthRule(DelIdDto dto);
}
